package com.bankcoder.listener;


import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.metadata.CellData;
import com.bankcoder.entity.CmpCheckEntity;
import com.bankcoder.entity.ResultModel;
import com.bankcoder.operation.DoCheckRule;
import com.bankcoder.operation.ExcelWriter;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 废弃，转移到main方法中
 */

public class CheckFileNameListener extends AnalysisEventListener<CmpCheckEntity> {
    DoCheckRule doCheck;
    List<CmpCheckEntity> allCmpData=new ArrayList<CmpCheckEntity>();
    List<CmpCheckEntity> filterLowCmpData=new ArrayList<CmpCheckEntity>();

    public CheckFileNameListener() {
        super();
    }

    @Override
    public void invokeHead(Map<Integer, CellData> headMap, AnalysisContext context) {
        super.invokeHead(headMap, context);
    }

    /**
     * 循环读取数据，将数据放到一个集合中
     * @param cmpCheckEntity
     * @param analysisContext
     */
    public void invoke(CmpCheckEntity cmpCheckEntity, AnalysisContext analysisContext) {
        //筛选出本次需要检查的所有数据
        if(cmpCheckEntity.getCheckPassed()=="#VALUE!"|| cmpCheckEntity.getCheckPassed().isEmpty()){
            allCmpData.add(cmpCheckEntity);
            //过滤掉复杂度低的，只要复杂度中高记录

        }

    }

    /**
     * 这个方法最后执行
     * @param analysisContext
     */
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        /**
        //System.out.println("本次CMP中要处理的数据量"+allCmpData.size());
        //System.out.println("doAfterAllAnalysed 方法执行了......");
        ExcelWriter excelWriter=new ExcelWriter();
        //初始化所有规则检查的结果集合
        List<ResultModel> allRestlts=new ArrayList<ResultModel>();
        doCheck=new DoCheckRule();
        if(allCmpData!=null && allCmpData.size()>0){
            for(CmpCheckEntity cmpCheckEntity : allCmpData){
                //todo rule1:文件命名规则
                //需要返回来一个ResultModel集合，然后把所有检查项集合汇总了一起写到excel里
                List<ResultModel> list1= doCheck.checkFileName(cmpCheckEntity);
                allRestlts.addAll(list1);
                //todo rule2:主机梳理记录
                //检查规则：复杂度为高、中交易，需要400老师评审通过后，进入开发阶段
                System.out.println("==>"+cmpCheckEntity.getProcessName()+"==="+cmpCheckEntity.getTranName()+"===="+cmpCheckEntity.getComplexLevel());
                if(!cmpCheckEntity.getComplexLevel().equals("低")){
                    System.out.println("yangmlb########"+cmpCheckEntity.getProcessName()+"==="+cmpCheckEntity.getTranName()+"===="+cmpCheckEntity.getComplexLevel());
                    //根据程序名找到所有路径包括”评审记录“的文件，读取文件内容，判断其是否通过
                    doCheck.checkHostReview(cmpCheckEntity);
                }



            }

            //todo 待所有规则都检查完毕，最后执行写入
            excelWriter.writeExcelFirst("不符合问题跟踪",allRestlts);
        }
        */
    }

    /**
     * 输出表头  这个方法最先执行
     * @param headMap
     * @param context
     */
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        super.invokeHeadMap(headMap, context);
        System.out.println("headMap==>"+headMap.toString());
    }
}

